package com.xb.loan.fund.service;


import com.xb.loan.fund.service.bean.CashTransferVO;
import com.xb.loan.fund.service.bean.StatUserTransferVO;
import com.xb.loan.log.exception.BizException;

import java.util.List;

/**
 * 转帐资金处理类
 */
public interface ICashTransferService {

	/**
	 * 转帐
	 * @param cashTransferVO 转账订单
	 * @return 返回转账订单ID
	 * @throws BizException
	 */
	public String transferCash(CashTransferVO cashTransferVO) throws BizException;
	
	/**
	 * 通过transferId查看代充值、转账或代提现订单
	 * @param transferId 订单ID
	 * @return 未查询到数据返回null
	 * @throws BizException
	 */
	public CashTransferVO queryCashTransferById(String transferId) throws BizException;
	
	/**
	 * 通过pTransferId查看代充值、转账或代提现订单
	 * @param partnerId 渠道ID
	 * @param pid 渠道订单ID
	 * @return 未查询到数据返回null
	 * @throws BizException
	 */
	public CashTransferVO queryCashTransferByPid(String partnerId, String pid) throws BizException;
	
	/**
	 * 根据以下条件查询代充值、转账或代提现订单
	 *
	 * @param fromUserId 转出用户Id
	 * @param toUserId 转入用户Id
	 * @param transferType 转账类型@TransferType
	 * @param startDate 开始日期 格式“yyyy-MM-dd hh:mm:ss”
	 * @param endDate 截止日期 格式“yyyy-MM-dd hh:mm:ss”
	 * @param pageNum 第N页
	 * @param numPerPage 每页条数
	 * @return 未查询到数据返回null
	 * @throws BizException
	 */
	public List<CashTransferVO> queryCashTransfer(String fromUserId, String toUserId, Integer transferType, String startDate, String endDate, int pageNum, int numPerPage) throws BizException;
	
	/**
	 * 根据以下条件查询代充值、转账或代提现订单总数
	 * @param fromUserId 转出用户Id
	 * @param toUserId 转入用户Id
	 * @param transferType 转账类型@TransferType
	 * @param startDate 开始日期 格式“yyyy-MM-dd hh:mm:ss”
	 * @param endDate 截止日期 格式“yyyy-MM-dd hh:mm:ss”
	 * @return 未查询到数据返回null
	 * @throws BizException
	 */
	public int queryCashTransferCount(String fromUserId, String toUserId, Integer transferType, String startDate, String endDate) throws BizException;
	
	/**
	 * 查询渠道转账额
	 * @param statTime
	 * @return
	 */
	public List<StatUserTransferVO> queryStatUserTransfer(String statTime);
	
}
